package 数据结构和算法入门计划8月开始;

import java.util.HashSet;
import java.util.Set;
import java.util.Stack;

public class 反转字符串中的元音字母3450820 {
    // class Solution {
//     public String reverseVowels(String s) {
//         int n = s.length();
//         char[] arr = s.toCharArray();
//         int i = 0, j = n - 1;
//         while (i < j) {
//             while (i < n && !isVowel(arr[i])) {
//                 ++i;
//             }
//             while (j > 0 && !isVowel(arr[j])) {
//                 --j;
//             }
//             if (i < j) {
//                 swap(arr, i, j);
//                 ++i;
//                 --j;
//             }
//         }
//         return new String(arr);
//     }

//     public boolean isVowel(char ch) {
//         return "aeiouAEIOU".indexOf(ch) >= 0;
//     }

//     public void swap(char[] arr, int i, int j) {
//         char temp = arr[i];
//         arr[i] = arr[j];
//         arr[j] = temp;
//     }
// }

    class Solution{
        public String reverseVowels(String s) {
            if(s.length() == 1) return s;
            Stack<Character> stack = new Stack<>();
            Set<Character> set = new HashSet<>();
            StringBuffer sb = new StringBuffer();
            StringBuffer ans = new StringBuffer();
            set.add('a');
            set.add('e');
            set.add('i');
            set.add('o');
            set.add('u');
            set.add('A');
            set.add('E');
            set.add('I');
            set.add('O');
            set.add('U');
            int n = s.length();
            for(int i = 0; i < n; ++i){
                if(set.contains(s.charAt(i))){
                    sb.append('*');
                    stack.push(s.charAt(i));
                }else{
                    sb.append(s.charAt(i));
                }
            }
            for(int i = 0; i < n; ++i){
                if(sb.charAt(i) == '*'){
                    ans.append(stack.pop());
                }else{
                    ans.append(sb.charAt(i));
                }
            }
            return ans.toString();
        }
    }
}
